home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 August / CHIP_CD_2004-08.iso / software / amc / amc_install.exe / {app} / Scripts / Filmweb (PL).ifs < prev    next >
Encoding:
Text File  |  2004-03-20  |  18.2 KB  |  488 lines

  1. // GETINFO SCRIPTING
  2. // Filmweb (PL) import, v2004 by BestiaPL
  3.  
  4. (***************************************************
  5.  *  Filmweb movie information importation script   *
  6.  *           (c) 2002 Piotr Kardasz                *
  7.  *      03.03.2004 Modyfications by BestiaPL       *
  8.  *      support for new movie database links       *
  9.  *                                                 *
  10.  *  For use with Ant Movie Catalog 3.2.1           *
  11.  *  www.antp.be/software/moviecatalog              *
  12.  *                                                 *
  13.  *  This program is free software; you can         *
  14.  *  redistribute it and/or modify it under the     *
  15.  *  terms of the GNU General Public License as     *
  16.  *  published by the Free Software Foundation;     *
  17.  *  either version 2 of the License, or (at your   *
  18.  *  option) any later version.                     *
  19.  ***************************************************)
  20.  
  21. program FilmWeb;
  22. var
  23.   MovieName: string;
  24.  
  25. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  26. var
  27.   i: Integer;
  28. begin
  29.   result := -1;
  30.   if StartAt < 0 then
  31.     StartAt := 0;
  32.   for i := StartAt to List.Count-1 do
  33.     if Pos(Pattern, List.GetString(i)) <> 0 then
  34.     begin
  35.       result := i;
  36.       Break;
  37.     end;
  38. end;
  39.  
  40. procedure DelSpace(var Value: String);
  41. var
  42.   FullValue: String;
  43.   Counter: Integer;
  44. begin
  45.   if Value <> '' then
  46.   begin
  47.     FullValue := FullValue + StrGet(Value, 1);
  48.     for Counter := 2 to Length(Value) do
  49.     begin
  50.       if StrGet(Value, Counter) <> ' ' then
  51.         FullValue := FullValue + StrGet(Value, Counter)
  52.       else
  53.         if StrGet(FullValue, Length(FullValue)) <> ' ' then
  54.           FullValue := FullValue + ' ';
  55.     end;
  56.     Value := FullValue;
  57.   end
  58. end;
  59.  
  60. procedure DecodeHTML(var Value: String);
  61. var
  62.   FullValue, CharCode: String;
  63.   Counter: Integer;
  64. begin
  65.   if Value <> '' then
  66.   begin
  67.     FullValue := '';
  68.     Counter := 1;
  69.     repeat
  70.       if StrGet(Value, Counter) <> '&' then
  71.         begin
  72.           CharCode := copy(Value, Counter, 1);
  73.           case CharCode of
  74.             '▒': CharCode := '╣';
  75.             '╢': CharCode := '£';
  76.             'í': CharCode := 'Ñ';
  77.             '╝': CharCode := 'ƒ';
  78.             'ª': CharCode := 'î';
  79.             '¼': CharCode := 'Å';
  80.           end;
  81.           FullValue := FullValue + CharCode;
  82.           Counter := Counter + 1;
  83.         end
  84.       else
  85.         begin
  86.           CharCode := copy(Value, Counter, 7);
  87.           case CharCode of
  88.             'ą': FullValue := FullValue + '╣';
  89.             'ć': FullValue := FullValue + 'µ';
  90.             'ę': FullValue := FullValue + 'Ω';
  91.             'ł': FullValue := FullValue + '│';
  92.             'ń': FullValue := FullValue + '±';
  93.             'ó': FullValue := FullValue + '≤';
  94.             'ś': FullValue := FullValue + '£';
  95.             'ź': FullValue := FullValue + 'ƒ';
  96.             'ż': FullValue := FullValue + '┐';
  97.             'Ą': FullValue := FullValue + 'Ñ';
  98.             'Ć': FullValue := FullValue + '╞';
  99.             'Ę': FullValue := FullValue + '╩';
  100.             'Ł': FullValue := FullValue + 'ú';
  101.             'Ń': FullValue := FullValue + '╤';
  102.             'Ó': FullValue := FullValue + '╙';
  103.             'Ś': FullValue := FullValue + 'î';
  104.             'Ź': FullValue := FullValue + 'Å';
  105.             'Ż': FullValue := FullValue + '»';
  106.             'Š': FullValue := FullValue + ' ';
  107.             'š': FullValue := FullValue + 'í';
  108.             'Ţ': FullValue := FullValue + 'í';
  109.             'ţ': FullValue := FullValue + 'ú';
  110.             'Ť': FullValue := FullValue + 'ñ';
  111.             'ť': FullValue := FullValue + 'Ñ';
  112.             'Ŧ': FullValue := FullValue + 'î';
  113.             'ŧ': FullValue := FullValue + 'º';
  114.             'Ũ': FullValue := FullValue + '¿';
  115.             'ũ': FullValue := FullValue + '⌐';
  116.             'Ű': FullValue := FullValue + '¬';
  117.             'ű': FullValue := FullValue + '½';
  118.             'Ų': FullValue := FullValue + '¼';
  119.             'ų': FullValue := FullValue + '¡';
  120.             'Ŵ': FullValue := FullValue + '«';
  121.             'ŵ': FullValue := FullValue + '»';
  122.             'Ŷ': FullValue := FullValue + '░';
  123.             'ŷ': FullValue := FullValue + '▒';
  124.             'Ÿ': FullValue := FullValue + '▓';
  125.             'ƀ': FullValue := FullValue + '┤';
  126.             'Ɓ': FullValue := FullValue + '╡';
  127.             'Ƃ': FullValue := FullValue + '╢';
  128.             'ƃ': FullValue := FullValue + '╖';
  129.             'Ƅ': FullValue := FullValue + '╕';
  130.             'ƅ': FullValue := FullValue + '╣';
  131.             'Ɔ': FullValue := FullValue + '║';
  132.             'Ƈ': FullValue := FullValue + '╗';
  133.             'ƈ': FullValue := FullValue + '╝';
  134.             'Ɖ': FullValue := FullValue + '╜';
  135.             'Ɛ': FullValue := FullValue + '╛';
  136.             'Ƒ': FullValue := FullValue + '┐';
  137.             'ƒ': FullValue := FullValue + '└';
  138.             'Ɠ': FullValue := FullValue + '┴';
  139.             'Ɣ': FullValue := FullValue + '┬';
  140.             'ƕ': FullValue := FullValue + '├';
  141.             'Ɩ': FullValue := FullValue + '─';
  142.             'Ɨ': FullValue := FullValue + '┼';
  143.             'Ƙ': FullValue := FullValue + '╞';
  144.             'ƙ': FullValue := FullValue + '╟';
  145.             'Ȁ': FullValue := FullValue + '╚';
  146.             'ȁ': FullValue := FullValue + '╔';
  147.             'Ȃ': FullValue := FullValue + '╩';
  148.             'ȃ': FullValue := FullValue + '╦';
  149.             'Ȅ': FullValue := FullValue + '╠';
  150.             'ȅ': FullValue := FullValue + '═';
  151.             'Ȇ': FullValue := FullValue + '╬';
  152.             'ȇ': FullValue := FullValue + '╧';
  153.             'Ȉ': FullValue := FullValue + '╨';
  154.             'ȉ': FullValue := FullValue + '╤';
  155.             'Ȑ': FullValue := FullValue + '╥';
  156.             'ȑ': FullValue := FullValue + '╙';
  157.             'Ȓ': FullValue := FullValue + '╘';
  158.             'ȓ': FullValue := FullValue + '╒';
  159.             'Ȕ': FullValue := FullValue + '╓';
  160.             'ȕ': FullValue := FullValue + '╫';
  161.             'Ȗ': FullValue := FullValue + '╪';
  162.             'ȗ': FullValue := FullValue + '┘';
  163.             'Ș': FullValue := FullValue + '┌';
  164.             'ș': FullValue := FullValue + '█';
  165.             'Ƞ': FullValue := FullValue + '▄';
  166.             'ȡ': FullValue := FullValue + '▌';
  167.             'Ȣ': FullValue := FullValue + '▐';
  168.             'ȣ': FullValue := FullValue + '▀';
  169.             'Ȥ': FullValue := FullValue + 'α';
  170.             'ȥ': FullValue := FullValue + 'ß';
  171.             'Ȧ': FullValue := FullValue + 'Γ';
  172.             'ȧ': FullValue := FullValue + 'π';
  173.             'Ȩ': FullValue := FullValue + 'Σ';
  174.             'ȩ': FullValue := FullValue + 'σ';
  175.             'Ȱ': FullValue := FullValue + 'µ';
  176.             'ȱ': FullValue := FullValue + 'τ';
  177.             'Ȳ': FullValue := FullValue + 'Φ';
  178.             'ȳ': FullValue := FullValue + 'Θ';
  179.             'ȴ': FullValue := FullValue + 'Ω';
  180.             'ȵ': FullValue := FullValue + 'δ';
  181.             'ȶ': FullValue := FullValue + '∞';
  182.             'ȷ': FullValue := FullValue + 'φ';
  183.             'ȸ': FullValue := FullValue + 'ε';
  184.             'ȹ': FullValue := FullValue + '∩';
  185.             'ɀ': FullValue := FullValue + '≡';
  186.             'Ɂ': FullValue := FullValue + '±';
  187.             'ɂ': FullValue := FullValue + '≥';
  188.             'Ƀ': FullValue := FullValue + '≤';
  189.             'Ʉ': FullValue := FullValue + '⌠';
  190.             'Ʌ': FullValue := FullValue + '⌡';
  191.             'Ɇ': FullValue := FullValue + '÷';
  192.             'ɇ': FullValue := FullValue + '≈';
  193.             'Ɉ': FullValue := FullValue + '°';
  194.             'ɉ': FullValue := FullValue + '∙';
  195.             'ɐ': FullValue := FullValue + '·';
  196.             'ɑ': FullValue := FullValue + '√';
  197.             'ɒ': FullValue := FullValue + 'ⁿ';
  198.             'ɓ': FullValue := FullValue + '²';
  199.             'ɔ': FullValue := FullValue + '■';
  200.             'ɕ': FullValue := FullValue + ' ';
  201.             '&#x%DF;': FullValue := FullValue + '▀';
  202.             '4': FullValue := FullValue + '"';      
  203.           else
  204.             FullValue := FullValue + CharCode;  
  205.           end;
  206.           Counter := Counter + 7;
  207.         end;
  208.     until Counter > Length(Value);
  209.     HTMLDecode(FullValue);
  210.     Value := FullValue;
  211.   end
  212. end;
  213.  
  214. procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
  215. var
  216.   Line: string;
  217.   MovieTitle, MovieAddress: string;
  218.   StartPos, EndPos: Integer;
  219. begin
  220.   LineNr := FindLine('>           [film]<', Page, LineNr);
  221.   if LineNr > -1 then
  222.   begin
  223.     PickTreeAdd('Znaleziono filmy:', '');
  224.     Line := Page.GetString(LineNr);
  225.     repeat
  226.       repeat
  227.         StartPos := pos('>           [film]<', Line) + 19;
  228.         Line := copy(Line, StartPos, Length(Line) - StartPos);
  229.         StartPos := pos('href="', Line) + 6;
  230.         Line := copy(Line, StartPos, Length(Line) - StartPos);        
  231.         MovieAddress := copy(Line, 1, pos('">', Line) - 1);
  232.         StartPos := pos('">', Line) + 2;
  233.         Line := copy(Line, StartPos, Length(Line) - StartPos);
  234.         MovieTitle := copy(Line, 1, pos('</a>', Line) - 1);
  235.         DecodeHTML(MovieTitle);
  236.         HTMLRemoveTags(MovieTitle);
  237.     if pos('http', MovieAddress) = 0 then
  238.             MovieAddress := 'http://www.filmweb.pl/' + MovieAddress;
  239.         PickTreeAdd(MovieTitle, MovieAddress);
  240.  
  241.       until pos('>           [film]<', Line) = 0;
  242.       LineNr := LineNr + 1;
  243.       Line := Page.GetString(LineNr);
  244.     until pos('>           [film]<', Line) = 0;
  245.   end
  246.   else
  247.     break;
  248. end;
  249.  
  250. procedure AnalyzePage(Address: string);
  251. var
  252.   Page: TStringList;
  253.   LineNr: Integer;
  254. begin
  255.   Page := TStringList.Create;
  256.   Page.Text := GetPage(Address);
  257. //  if pos('wyniki wyszukiwania [Filmweb.pl]', Page.Text) = 0 then
  258.   if pos('yniki wyszukiwania', Page.Text) = 0 then
  259.     AnalyzeMoviePage(Page)
  260.   else
  261.   begin
  262.     PickTreeClear;
  263.     LineNr := 0;
  264.     AddMoviesTitles(Page, LineNr);
  265.     if PickTreeExec(Address) then
  266.       AnalyzePage(Address);
  267.   end;
  268.   Page.Free;
  269. end;
  270.  
  271. procedure AnalyzeMoviePage(Page: TStringList);
  272. var
  273.   Line, Value, FullValue: string;
  274.   LineNr, Counter: Integer;
  275.   StartPos, EndPos: Integer;
  276. begin
  277.  
  278.   // Tytu│ polski
  279.   LineNr := FindLine('name="tytul">', Page, 0);
  280.   if LineNr > -1 then
  281.   begin
  282.     Line := Page.GetString(LineNr);
  283.     StartPos := pos('name="tytul">', Line) + 12;
  284.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  285.     StartPos := pos('>', Line) + 1;
  286.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  287.     
  288.     StartPos:= pos(' (aka', Line);
  289.     if StartPos > 0
  290.       then Value := copy(Line, 1, StartPos - 1)
  291.       else Value := copy(Line, 1, pos('</column>', AnsiLowerCase(Line)) - 1);
  292.     DecodeHTML(Value);  
  293.     SetField(fieldTranslatedTitle, Value);
  294.   end
  295.  
  296.   // Tytu│ oryginalny
  297.   LineNr := FindLine('name="tytulorg">', Page, 0);
  298.   if LineNr > -1 then
  299.   begin
  300.     Line := Page.GetString(LineNr);
  301.     StartPos := pos('name="tytulorg">', Line) + 15;
  302.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  303.     StartPos := pos('>', Line) + 1;
  304.     Line := copy(Line, StartPos, Length(Line) - StartPos);  
  305.     Value := copy(Line, 1, pos('</column>', AnsiLowerCase(Line)) - 1);
  306.     DecodeHTML(Value);  
  307.     SetField(fieldOriginalTitle, Value);
  308.   end
  309.            LineNr:= FindLine('<br><span class="text">', Page, 0);
  310.            if LineNr > -1
  311.           then begin
  312.                     Line := Page.GetString(LineNr);
  313.                     StartPos := pos('<br><span class="text">', Line) + 23;
  314.                     Line := copy(Line, StartPos, Length(Line) - StartPos);
  315.                     StartPos := pos('(', Line) + 1;
  316.                     Line := copy(Line, StartPos, Length(Line) - StartPos);
  317.                     Value := copy(Line, 1, pos('</span><br>', AnsiLowerCase(Line)) - 2);
  318.                     DecodeHTML(Value);
  319.                     SetField(fieldOriginalTitle, Value);
  320.          end
  321.  
  322.   // îrednia ocena  
  323.   LineNr := FindLine('rednia ocena:', Page, 0);
  324.   if LineNr > -1 then
  325.   begin
  326.     Line := Page.GetString(LineNr);
  327.     StartPos := pos('rednia ocena:', Line) + 12;
  328.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  329.     StartPos := pos('">', Line) + 2;
  330.     Line := copy(Line, StartPos, Length(Line) - StartPos);  
  331.     Value := IntToStr(Round(StrToInt(StrGet(Line, 1), 0) + (StrToInt(StrGet(Line, 3), 0) / 10) + (StrToInt(StrGet(Line, 4), 0) / 100)));
  332.     SetField(fieldRating, Value);
  333.   end
  334.  
  335.   // Kategoria
  336.   LineNr := FindLine('>gatunek:</td>', Page, 0);
  337.   if LineNr > -1 then
  338.   begin
  339.     Line := Page.GetString(LineNr);
  340.     StartPos := pos('>gatunek:</td>', Line) + 10;
  341.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  342.     StartPos := pos('class="text"', Line) + 12;
  343.     Line := copy(Line, StartPos, Length(Line) - StartPos);    
  344.     StartPos := pos('">', Line) + 2;
  345.     Line := copy(Line, StartPos, Length(Line) - StartPos);  
  346.     Value := copy(Line, 1, pos('</td>', Line) - 1);
  347.     DecodeHTML(Value); 
  348.     SetField(fieldCategory, Value);
  349.   end
  350.     
  351.   // Kraj
  352.   LineNr := FindLine('>produkcja:</td>', Page, 0);
  353.   if LineNr > -1 then
  354.   begin
  355.     Line := Page.GetString(LineNr);
  356.     StartPos := pos('>produkcja:</td>', Line) + 13;
  357.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  358.     StartPos := pos('class="text"', Line) + 12;
  359.     Line := copy(Line, StartPos, Length(Line) - StartPos);    
  360.     StartPos := pos('">', Line) + 2;
  361.     Line := copy(Line, StartPos, Length(Line) - StartPos);  
  362.     Value := copy(Line, 1, pos('</td>', Line) - 1);
  363.     DecodeHTML(Value); 
  364.     SetField(fieldCountry, Value);
  365.   end    
  366.   
  367.   // Rok produkcji
  368.   LineNr := FindLine('>data produkcji:</td>', Page, 0);
  369.   if LineNr > -1 then
  370.   begin
  371.     Line := Page.GetString(LineNr);
  372.     StartPos := pos('>data produkcji:</td>', Line) + 12;
  373.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  374.     StartPos := pos('class="text"', Line) + 12;
  375.     Line := copy(Line, StartPos, Length(Line) - StartPos);    
  376.     StartPos := pos('">', Line) + 2;
  377.     Line := copy(Line, StartPos, Length(Line) - StartPos);  
  378.     Value := copy(Line, 1, pos('</td>', Line) - 1);
  379.     SetField(fieldYear, Value);
  380.   end
  381.  
  382.   // Re┐yseria
  383.   LineNr := FindLine('yseria:</td>', Page, 0);
  384.   if LineNr > -1 then
  385.   begin
  386.     Line := Page.GetString(LineNr);
  387.     StartPos := pos('yseria:</td>', Line) + 12;
  388.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  389.     Value := copy(Line, 1, pos('</a></td></tr>', Line) - 1);
  390.     HTMLRemoveTags(Value);
  391.     DecodeHTML(Value); 
  392.     SetField(fieldDirector, Value);
  393.   end
  394.  
  395.   // Producent
  396. //  LineNr := FindLine('>producent:</td>', Page, 0);
  397. //  if LineNr > -1 then
  398. //  begin
  399. //    Line := Page.GetString(LineNr);
  400. //    StartPos := pos('>producent:</td>', Line) + 16;
  401. //    Line := copy(Line, StartPos, Length(Line) - StartPos); 
  402. //    Value := copy(Line, 1, pos('</a></td></tr>', Line) - 1);
  403. //    HTMLRemoveTags(Value);
  404. //    DecodeHTML(Value); 
  405. //    SetField(fieldProducer, Value);
  406. //  end  
  407.  
  408.   // Czas trwania
  409.   LineNr := FindLine('>czas trwania:</td>', Page, 0);
  410.   if LineNr > -1 then
  411.   begin
  412.     Line := Page.GetString(LineNr);
  413.     StartPos := pos('>czas trwania:</td>', Line) + 19;
  414.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  415.     StartPos := pos('class="text"', Line) + 12;
  416.     Line := copy(Line, StartPos, Length(Line) - StartPos);    
  417.     StartPos := pos('">', Line) + 2;
  418.     Line := copy(Line, StartPos, Length(Line) - StartPos);  
  419.     Value := copy(Line, 1, pos(' min.</td>', Line) - 1);
  420.     SetField(fieldLength, Value);
  421.   end
  422.   
  423.   // Opis filmu
  424.   LineNr := FindLine('O filmie</b>', Page, 0);
  425.   if LineNr > -1 then
  426.   begin
  427.     Line := Page.GetString(LineNr);
  428.     StartPos := pos('O filmie</b>', Line) + 11;
  429.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  430.     StartPos := pos('">', Line) + 2;
  431.     Line := copy(Line, StartPos, Length(Line) - StartPos);  
  432.     Value := copy(Line, 1, pos('<', Line) - 1);
  433.     HTMLRemoveTags(Value);
  434.     DecodeHTML(Value); 
  435.     Value:=StringReplace(Value, chr(34),chr(39)); // zamiana cudzyslowu na apostrof
  436.     DelSpace(Value);
  437.     SetField(fieldDescription, Value);
  438.   end     
  439.   
  440.   // Obsada
  441.   LineNr := FindLine('Obsada</b>', Page, 0);
  442.   if LineNr > -1 then
  443.   begin
  444.     Line := Page.GetString(LineNr);
  445.     StartPos := pos('Obsada</b>', Line) + 10;
  446.     Line := copy(Line, StartPos, Length(Line) - StartPos);
  447.     Value := '';
  448.     repeat
  449.       if (pos('<a clas', Line) > 0) AND (pos('<a clas', Line) < pos(':</a></td>', Line)) then
  450.       begin
  451.         StartPos:= Pos('<a clas', Line) + 7;
  452.         Line:= Copy(Line, StartPos, Length(Line) - StartPos);
  453.         StartPos:= Pos('">', Line) + 2;
  454.         Line:= Copy(Line, StartPos, Length(Line) - StartPos);
  455.         Value:= Value + Copy(Line, 1, Pos(':</a></td>', Line) - 1) + ', ';
  456.         StartPos:= Pos(':</a></td>', Line) + 10;
  457.         Line:= Copy(Line, StartPos, Length(Line) - StartPos);         
  458.       end
  459.     until (pos('<a clas', Line) = 0) OR (pos('<a clas', Line) > pos(':</a></td>', Line));
  460.     Value := copy(Value, 1, Length(Value) - 2);
  461.     DecodeHTML(Value); 
  462.     SetField(fieldActors, Value);
  463.   end
  464.   
  465.   //URL
  466.   begin
  467.     setField(fieldURL, 'http://www.filmweb.pl/searchtopic.xml?gdzie=1&key='+UrlEncode(MovieName));
  468.   end
  469.   
  470.   DisplayResults;
  471. end;
  472.  
  473. begin
  474.   if CheckVersion(3,4,2) then
  475.   begin
  476.     MovieName := GetField(fieldOriginalTitle);
  477.     if MovieName = '' then
  478.       MovieName := GetField(fieldTranslatedTitle);
  479.     if Input('FilmWeb Import', 'Podaj tytu│ filmu:', MovieName) then
  480.     begin
  481.       AnalyzePage('http://www.filmweb.pl/searchtopic.xml?gdzie=1&key='+UrlEncode(MovieName));
  482.     end;
  483.   end else
  484.     ShowMessage('Skrypt wymaga programu Ant Movie Catalog w wersji 3.4.2 lub nowszej');
  485. end.
  486.  
  487.  
  488.